//
//  LoginPresenter.m
//  MVP框架设计_OC
//
//  Created by globalives2 on 2017/2/27.
//  Copyright © 2017年 globalives2. All rights reserved.
//

#import "LoginPresenter.h"
#import "LoginModel.h"

//以下是P层实现的第一个部分

//注意问题
//问题一：关联V和M层
//持有M层和V层引用(指针)
//面向对象：OOP思想
//问题二：如何绑定V层？
//答案：提供绑定方法(绑定、解除绑定)

//实现第二个部分
//问题：如何调用P层？
//答案：在V层调用(可以在UIView里面调用P层，也可以在UIViewController调用P层)

@interface LoginPresenter ()

@property (nonatomic) id<LoginView> view;
@property (nonatomic) LoginModel *model;

@end

@implementation LoginPresenter

- (instancetype)init {
    self = [super init];
    if (self) {
        _model = [[LoginModel alloc] init];
    }
    return self;
}

// 绑定
- (void)attachView:(id<LoginView>)view {
    _view = view;
}
// 解除
- (void)detachView {
    _view = nil;
}

- (void)loginWithName:(NSString *)name password:(NSString *)password {
    // 实现关联
    // 发起调用Model层
    [_model loginWithName:name password:password callback:^(NSString *result) {
        // 目的： 为了当我们的网络请求没有完成，但是退出了Controller ，就没有必要刷新UI了
        if (_view != nil) {
            [_view onLoginResult:result];
        }else {
            // 终止网络请求
            
        }
    }];
}
@end
